<?php
////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//         佛祖保佑       永无BUG     永不修改                    //
////////////////////////////////////////////////////////////////////

/**
 * Created by PhpStorm.
 * User: Saukura
 * Date: 2017/11/13
 * Time: 18:24
 */

namespace app\pay;


class AliPay extends Base
{
    /**
     * 开发者私钥
     * @var
     */
    public $rsaPrivateKey;

    /**
     * 支付宝公钥
     * @var
     */
    public $alipayrsaPublicKey;


    public function pay()
    {
        include dirname(ROOT_PATH).DS.'drh3'.DS.'extend'.DS.'alipay'.DS.'AopSdk.php';
        include dirname(ROOT_PATH).DS.'drh3'.DS.'extend'.DS.'alipay'.DS.'aop'.DS.'AopClient.php';
        $aop=new \AopClient();
        $aop->gatewayUrl="https://openapi.alipay.com/gateway.do";
        $aop->appId='2018100861608524';
        $aop->rsaPrivateKey=config('rsaPrivateKey');
        $aop->alipayrsaPublicKey=config('alipayrsaPublicKey');
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset='UTF-8';
        $aop->format='json';
        $request=new \AlipayTradeWapPayRequest ();
        $data=[
            'timeout_express'=>time(),
            'total_amount'=>1,
            'out_trade_no'=>time(),
        ];
        $request->setBizContent(json_encode($data));
        $result = $aop->pageExecute ( $request);

//        return htmlentities($result,ENT_QUOTES,"UTF-8");
        $str=<<<EOF
echo $result
EOF;
        return $result;

        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        if(!empty($resultCode)&&$resultCode == 10000){
            echo "成功";
        } else {
            echo "失败";
        }
    }


//    /**
//     * 请求授权
//     */
//    public function getUserInfo()
//    {
////        AlipayTradeAppPayResponse
//        $app_id=config('alipay_appId');
//        $red_uri=urlencode(config('url')."/public/alipay.php/AliPay/callBack");
//        $url="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id={$app_id}&scope=auth_userinfo&redirect_uri={$red_uri}";
//        $this->redirect($url);
//    }
//
//    /**
//     * 获取code  获取支付宝信息
//     * @throws \Exception
//     */
//    public function callBack()
//    {
//        $info=input('get.');
//        $auth_code=$info['auth_code'];//换取凭票
//        include dirname(ROOT_PATH).DS.'XingCheng'.DS.'extend'.DS.'alipay'.DS.'AopSdk.php';
//        include dirname(ROOT_PATH).DS.'XingCheng'.DS.'extend'.DS.'alipay'.DS.'aop'.DS.'AopClient.php';
//        $c=new \AopClient();
//        $c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
//        $c->appId = config('aliPay_appId');
////        $c->rsaPrivateKey =file_get_contents('./alikey/alipay_privete_key.txt');
////        $c->alipayrsaPublicKey =file_get_contents('./alikey/alipay_public_key.txt');
//        $c->rsaPrivateKey =config('alipay_privete_key');
//        $c->alipayrsaPublicKey =config('alipay_public_key');
//        $c->charset = "GBK";
//        $c->signType= "RSA2";
//        $c->format = "json";
//        $c->apiVersion = '1.0';
//        $request=new \AlipaySystemOauthTokenRequest();
//        $request->setCode($auth_code);
//        $request->setGrantType("authorization_code");
//        $result = $c->execute ( $request);
//        debug("支付宝获取用户信息:",json_encode($result,true),'alipay_info.txt');
//        $res=json_decode(json_encode($result,true),true);
//        if(!isset($res['alipay_system_oauth_token_response']['access_token'])){
//            throw new \Exception('请勿重复访问');
//        }else{
//            $access_token=$res['alipay_system_oauth_token_response']['access_token'];
//        }
//        $aliPay_user_id=$res['alipay_system_oauth_token_response']['alipay_user_id'];
//
//        $this->getAliPayUserInfo($access_token);
//    }
//
//
//    private function getAliPayUserInfo($access_token)
//    {
//        $aop = new \AopClient ();
//        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
//        $aop->appId = config('aliPay_appId');;
//        $aop->rsaPrivateKey = config('alipay_privete_key');
//        $aop->alipayrsaPublicKey = config('alipay_public_key');
//        $aop->apiVersion = '1.0';
//        $aop->signType = 'RSA2';
//        $aop->postCharset='UTF-8';
//        $aop->format='json';
//
////获取用户信息
//        $request_a = new \AlipayUserUserinfoShareRequest ();
//        $result_a = $aop->execute ($request_a,$access_token); //这里传入获取的access_token
////        $responseNode_a = str_replace(".", "_", $request_a->getApiMethodName()) . "_response";
//        $user_info=json_decode(json_encode($result_a,true),true);
//        debug('支付宝信息:',json_encode($user_info),'aliPay_userInfo.txt');
//        $this->userBind($user_info);
//    }
//
//    /**
//     * 检测用户是否注册  绑定商户
//     * @param $user_info
//     * @return bool
//     * @throws \Exception
//     */
//    private function userBind($user_info)
//    {
//        if(empty($user_info['alipay_user_userinfo_share_response'])){
//            throw new \Exception('访问页面不存在1000');
//        }
//        $user_info=$user_info['alipay_user_userinfo_share_response'];
//        $shop_id=session('shop_id');
//        if(empty($user_info['user_id'])){
//            throw new \Exception('访问页面不存在1001');
//        }else{
//            $alipay_user_id=$user_info['user_id'];
//            $res=Db::table('xc_userinfo')
//                ->field('user_id')
//                ->where(['aliPay_user_id'=>$alipay_user_id])
//                ->find();
//            if (empty($res)) {
//                $user_id=$this->addUserInfo($user_info);
//            } else{
//                $user_id=$res['user_id'];
//            }
//            $url=config('url')."public/pay/#/?shop_id={$shop_id}&user_id={$user_id}&pay_type=AliPay";
////            $url=config('url')."public/pay/#/login?shop_id={$shop_id}&user_id={$user_id}&pay_type=AliPay";
//
//            $this->redirect($url);
//            return true;
//        }
//    }
//
//    private function addUserInfo($user_info)
//    {
//        Db::startTrans();
//        try{
//            $user_id=Db::table('xc_userinfo')
//                ->insertGetId([
//                    'user_name'=>'匿名（支付宝）',
//                    'user_openid'=>'',
//                    'user_qrcode'=>'',
//                    'create_time'=>time(),
//                    'unionid'=>'',
//                    'user_h5_openid'=>'',
//                    'alipay_user_id'=>$user_info['user_id']
//                ]);
//            $alipay_user=Db::table('xc_alipay_userinfo')
//                ->insertGetId([
//                    'wx_user_id'=>$user_id,
//                    'header_url'=>$user_info['avatar'],
//                    'province'=>$user_info['province'],
//                    'city'=>$user_info['city'],
//                    'user_name'=>$user_info['nick_name'],
//                    'is_student_certified'=>$user_info['is_student_certified'],
//                    'user_status'=>$user_info['user_status'],
//                    'is_certified'=>$user_info['is_certified'],
//                    'sex'=>$user_info['gender']=='m'?1:2,
//                    'alipay_user_unionid'=>$user_info['user_id'],
//                    'alipay_user_openid'=>$user_info['alipay_user_id'],
//                ]);
//            // 提交事务
//            Db::commit();
//            return $user_id;
//        } catch (\Exception $e) {
//            // 回滚事务
//            Db::rollback();
//            throw $e;
//        }
//
//    }
//
//    /**
//     * 获取ttg支付回调信息
//     */
//    public function aliPayNoticeMsg()
//    {
//        $info=input('get.');
//        if (!empty($info)){
//            $out_no=$info['out_no'];//获取订单号
////            Cache::set($out_no,'AliPay');
//            $return=$this->checkOrderNumber($out_no,$info['status']);
//            if($return['code']==0){
//                $this->redirect($return['jump_url']);
//            }else{
//                switch ($info['status']) {
//                    case 1:
//                        $this->successOrderDealWith($out_no,$info['status'],$return['type']);
//                        break;
//                    case 2:
//                        $this->redirect(config('url').'public/pay/#/detail?order_num='.$out_no."&pay_type=AliPay");
//                        break;
//                    case 4:
//                        $status=2;
//                        $this->failOrderDealWith($out_no,$status,$return['type']);
//                        break;
//                    default :
//                        throw new \Exception('访问参数错误');
//                }
//                switch($return['type']){
//                    case 1:
//                        $this->redirect(config('url').'public/pay/#/detail?order_num='.$out_no."&pay_type=AliPay");
//                        break;
//                    case 2:
//                        $this->redirect(config('url')."applet/#/home?shop_id={$return['shop_id']}&user_id={$return['user_id']}");
//                        break;
//                    default :
//                        throw new \Exception('访问参数错误');
//                }
//            }
//        }else{
//            throw new \Exception('请求参数错误');
//        }
//    }
//
//    /**
//     * 检测订单是否重复提交
//     * @param $out_no
//     * @param $status
//     * @return array
//     */
//    private function checkOrderNumber($out_no,$status)
//    {
//        if(substr($out_no,0,1)=='s'){//过来的是商城订单
//            $res=Db::table('xc_parent_order a')
//                    ->join('xc_child_order b ','a.parent_order_id=b.parent_order_id','LEFT')
//                    ->field([
//                        'a.user_id',
//                        'b.shop_id',
//                        'a.pay_status'
//                    ])->where([
//                        'a.parent_order_num'=>$out_no
//                    ])->select();
//            if(($res[0]['pay_status'] !=0 || $status==2)){
//                return [
//                    'code'=>0,
//                    'msg'=>'单号已存在,请勿重复提交',
//                    'jump_url'=>config('url').'public/pay/#/detail?order_num='.$out_no."&pay_type=AliPay"//跳转到商城首页
//                ];
//            }else{
//                return [
//                    'code'=>1,
//                    'msg'=>'SUCCESS',
//                    'type'=>2,
//                    'shop'=>$res[0]['shop_id'],
//                    'user_id'=>$res[0]['user_id']
//                ];
//            }
//        }
//        else if (is_numeric($out_no)){//过来的是POS机订单
//            $res=Db::table('xc_pos_order')
//                    ->field([
//                        'user_id',
//                        'shop_id',
//                        'transaction_status'
//                    ])->where([
//                        'post_order_num'=>$out_no
//                    ])->select();
//            if($res[0]['transaction_status'] !=0 || $status==2){
//                return [
//                    'code'=>0,
//                    'msg'=>'单号已存在,请勿重复提交',
//                    'jump_url'=>config('url').'public/pay/#/detail?order_num='.$out_no."&pay_type=AliPay"//跳转到商城首页
//                ];
//            }else{
//                return [
//                    'code'=>1,
//                    'msg'=>'SUCCESS',
//                    'type'=>1,
//                    'shop'=>$res[0]['shop_id'],
//                    'user_id'=>$res[0]['user_id']
//                ];
//            }
//        }
//    }
//
//    /**
//     * 失败订单处理
//     * @param $out_no
//     * @param $status
//     * @param $type
//     * @return bool
//     * @throws \Exception
//     * @throws \think\Exception
//     */
//    private function failOrderDealWith($out_no,$status,$type)
//    {
//        switch ($type) {
//            case 1:
//                Db::table('xc_pos_order')
//                    ->where(['post_order_num'=>$out_no])
//                    ->update([
//                        'transaction_status'=>$status,
//                        'transaction_end_time'=>time(),
//                    ]);
//                break;
//            case 2:
//                Db::table('xc_parent_order')
//                    ->where(['xc_parent_order'=>$out_no])
//                    ->update([
//                        'parent_order_end_time'=>time(),
//                        'pay_status'=>$status
//                    ]);
//                break;
//            default :
//                throw new \Exception('请求参数type错误');
//        }
//        return true;
//    }
//
//    private function successOrderDealWith($out_no,$status,$type)
//    {
//        $url=config('url')."public/home.php/Merchant/EndPosOrder";
//        switch($type){
//            case 1:
//                $mode='shop';
//                break;
//            case 2:
//                $mode='goods';
//                break;
//            default :
//                throw new \Exception('请求参数错误');
//        }
//        $data=['status'=>$status,'order_num'=>$out_no,'str'=>$mode,'type'=>$type,'pay_qrcode'=>2];
//        $res=https_curl_post($url,$data);
//        if(empty($res['code']) || $res['code']==0){
//            throw new \Exception('交易失败!');
//        }
//        return true;
//    }
//
//    public function notifyMsg()
//    {
//        $info=input('get.');
//        debug('ttg:支付宝：',json_encode($info),'ttgNoticeMsg.txt');
//        if(substr($info['out_no'],0,1)=='s'){
//            $type=2;
//        }else if (is_numeric($info['out_no'])){
//            $type=1;
//        }else{
//            throw new \Exception('订单请求方式错误');
//        }
////        Cache::set($info['out_no'],'AliPay');
//        $data=['status'=>$info['status'],'order_num'=>$info['out_no'],'str'=>'shop','type'=>$type,'pay_qrcode'=>2];
//        $url=config('url')."public/home.php/Merchant/EndPosOrder";
//        debug('url:支付宝：'.$url,'msg:'.json_encode($data)."\r\n".'return_msg:','noticeMsg.txt');
//        try{
//            $res=https_curl_post($url,$data);
//            debug('支付宝：EndPosOrderSettlement',$res,'EndPosOrderSettlement.txt');
//        }catch (\Exception $e){
//            debug('支付宝：error',$e->getMessage(),'error.txt');
//        }
//    }
}